<?php
/**
 * @category 	ClassSupport.php
 * @author 		Sung Hoon, Cho (akdddnet@gmail.com)
 * @since		2011. 1. 3.
 * @license		BSD License
 * @version		0.1
 */
 
class ClassSupport {
	private static $pathinfo;
	private static $admin_path = "admin";
	
	
	/**
	 * server path info를 explode시키면 첫번째 배열 값이 항상 빈값이 전달됨. 
	 * 딱히 불편한건 없지만 나중에 페이지 링크 걸때를 대비? 해서 0번째 배열값에 servername값을 넣어버림.
	 */
	public static function getRouterURL() {
		$pathinfo = rtrim($_SERVER['PATH_INFO'], "/");
			
		$servername = $_SERVER["SERVER_NAME"];
 			
		if(strpos($pathinfo, $servername) == 1) {
			$pathinfo = substr($pathinfo, 1);
		} else {
			$pathinfo = $servername.$pathinfo;
		}

		self::$pathinfo = explode("/", $pathinfo); 
		
		return self::$pathinfo;
	}
	
	/**
	 * 관리자로 사용될 path을 지정합니다.
	 * @param string $admin_path
	 */
	public static function setAdminPath($admin_path) {
		self::$admin_path = $admin_path;
	}
		
	
	/**
	 * 접속된 URL이 관리자 페이지인지 확인합니다.
	 */
	public static function isAdminPath() {
		$path_count = count(self::$pathinfo);
		
		// 도메인/admin/member/list 관리자는 무조건 2개 이상이 됨.
		// http://localhost/ 만 입력한 경우 path_count는 1이 됨 -_-;;
		if(($path_count > 2 && self::$pathinfo[1] == self::$admin_path)) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * URL에서 전달된 클래스 이름으로 실제 경로에 있는 파일을 include 해옵니다. 
	 * $filename값으로 모듈 폴더를 알아 내기 때문에 파일명과 모듈명이 서로 일치 해야됩니다. 
	 * 예) "TestController" 일 경우 모듈 폴더는 "test" 가 되어야 합니다.
	 * 
	 * @param string $filename	불러올 파일 이름.
	 * @param string $basepath	classes 위치
	 * @param string $suffix	불러올 클래스의 접미어.
	 */
	public static function getClassLoad($filename, $basepath, $suffix="Controller") {

			
		// 검색을 시작할 위치
		$offset = strlen($filename) - strlen($suffix)- 1;
			
		if(strpos($filename, $suffix, $offset) !== $offset) {
			$module_name = self::getModuleName($filename,$suffix);
			
			// base가 아닌 경우에만 admin으로 인정함.
			if(self::isAdminPath() && strcmp($module_name, "base")) {
				$class_full_path = $basepath."/".self::$admin_path."/".$module_name."/".ucwords($filename).".php";	
			} else if(!strcmp($module_name, 'menu')) {	// TODO 임시로 처리함 ㅠ 반드시 해결을 해야될 부분임!!
				$class_full_path = $basepath."/".self::$admin_path."/".$module_name."/".ucwords($filename).".php";
			} else {
				// base인 경우에는 위치가 조금 달라짐.
				if(!strcmp($module_name, "base")) {
					$class_full_path = $basepath."/_base/".ucwords($filename).".php";
				} else {
					$class_full_path = $basepath."/".$module_name."/".ucwords($filename).".php";
				}
			}
			
				
			if(file_exists($class_full_path)) {
				require_once $class_full_path;
			} else {
				
				throw new Exception($class_full_path." 경로에 파일이 존재하는지 확인해주십시요.");
			}
		} else {
			throw new Exception("클래스 파일명이 올바르지 않습니다. <br/>".$suffix."을(를) 반드시 접미어로 입력하셔야합니다.");
		}
	}
		
	/**
	 * 
	 * 클래스 파일 이름으로 모듈 명을 알아 냅니다.
	 * @param string $filename
	 * @param string $suffix
	 */
	public static function getModuleName($filename, $suffix="Controller") {
		return strtolower(str_replace($suffix, "", $filename));
	}
}